home *** CD-ROM | disk | FTP | other *** search
/ Young Minds / Young Minds Interactive CD-ROM.ISO / kriegspi / makemove.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-06-30  |  1.7 KB  |  75 lines

  1. #ifndef lint
  2. static char rcsid[] = "$Header: makemove.c,v 1.1 87/02/12 11:03:53 schoch Exp $";
  3. #endif
  4.  
  5. #include "externs.h"
  6.  
  7. makemove (from, to, color)
  8.     int from, to, color;
  9. {
  10.     int victim;
  11.     LIST l, lmember ();
  12.     MOVELIST newmove;
  13.     static MOVELIST lastmove;
  14.     char *malloc ();
  15.  
  16.     newmove = (MOVELIST) malloc (sizeof (struct MOVE));
  17.     newmove -> from = from;
  18.     newmove -> to = to;
  19.     newmove -> n = NULL;
  20.     if (!movelist)
  21.         movelist = newmove;
  22.     else
  23.         lastmove -> n = newmove;
  24.     lastmove = newmove;
  25.     victim = findvictim (from, to);
  26.     if (victim) {
  27.         if (option [ANNOUNCETAKES] || whose [victim] == ourcolor) {
  28.             char buf[128], *str;
  29.  
  30.             if (occupant [victim] == PAWN)
  31.                 str = "pawn";
  32.             else
  33.                 str = "piece";
  34.             if (reverse)
  35.                 sprintf(buf, "%s captured: %1c%1d\r",
  36.                      str, (9 - victim % 10) + 'a' - 1,
  37.                      victim / 10);
  38.             else
  39.                 sprintf(buf, "%s captured: %1c%1d\r",
  40.                      str, victim % 10 + 'a' - 1,
  41.                      9 - victim / 10);
  42.             message(buf, CAPTURE);
  43.         }
  44.         if (whose[victim] == ourcolor) {
  45.             redraw_pos(victim);
  46.             display_capture(whose[victim], occupant[victim]);
  47.         }
  48.         virgin [victim] = FALSE;
  49.         whose [victim] = EMPTY;
  50.         lfront (lmember (victim, piecelocs [1 - color]),
  51.             piecelocs [1 - color]);
  52.         piecelocs [1 - color] = (piecelocs [1 - color])->n;
  53.     }
  54.     l = lmember (from, piecelocs [color]);
  55.     l->i = to;
  56.     if (occupant [from] == KING)
  57.         kingloc [color] = to;
  58.     virgin [from] = FALSE;
  59.     whose [to] = color;
  60.     occupant [to] = occupant [from];
  61.     whose [from] = EMPTY;
  62.     occupant [from] = 0;
  63.     if (occupant [to] == PAWN
  64.     && ((to / 10 == 1 && color == WHITE)
  65.     ||  (to / 10 == 8 && color == BLACK))) {
  66.         if (option [ANNOUNCETAKES])
  67.             message("pawn promoted\n", MESSAGE);
  68.         occupant [to] = QUEEN;
  69.     }
  70.     if (whose [to] == ourcolor) {
  71.         redraw_pos(from);
  72.         redraw_piece(to);
  73.     }
  74. }
  75.